/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.cli; import java.util.Arrays; import junit.framework.TestCase; public class ValuesTest extends TestCase { /** CommandLine instance */ private CommandLine _cmdline = null; public void setUp() throws Exception { Options options = new Options(); options.addOption("a", false, "toggle -a"); options.addOption("b", true, "set -b"); options.addOption("c", "c", false, "toggle -c"); options.addOption("d", "d", true, "set -d"); options.addOption(OptionBuilder.withLongOpt("e").hasArgs().withDescription("set -e ").create('e')); options.addOption("f", "f", false, "jk"); options.addOption(OptionBuilder.withLongOpt("g").hasArgs(2).withDescription("set -g").create('g')); options.addOption(OptionBuilder.withLongOpt("h").hasArgs(2).withDescription("set -h").create('h')); options.addOption(OptionBuilder.withLongOpt("i").withDescription("set -i").create('i')); options.addOption(OptionBuilder.withLongOpt("j").hasArgs().withDescription("set -j").withValueSeparator('=').create('j')); options.addOption(OptionBuilder.withLongOpt("k").hasArgs().withDescription("set -k").withValueSeparator('=').create('k')); options.addOption(OptionBuilder.withLongOpt("m").hasArgs().withDescription("set -m").withValueSeparator().create('m')); String[] args = new String[] { "-a", "-b", "foo", "--c", "--d", "bar", "-e", "one", "two", "-f", "arg1", "arg2", "-g", "val1", "val2" , "arg3", "-h", "val1", "-i", "-h", "val2", "-jkey=value", "-j", "key=value", "-kkey1=value1", "-kkey2=value2", "-mkey=value"}; CommandLineParser parser = new PosixParser(); _cmdline = parser.parse(options,args); } public void testShortArgs() { assertTrue( _cmdline.hasOption("a") ); assertTrue( _cmdline.hasOption("c") ); assertNull( _cmdline.getOptionValues("a") ); assertNull( _cmdline.getOptionValues("c") ); } public void testShortArgsWithValue() { assertTrue( _cmdline.hasOption("b") ); assertTrue( _cmdline.getOptionValue("b").equals("foo")); assertEquals(1, _cmdline.getOptionValues("b").length); assertTrue( _cmdline.hasOption("d") ); assertTrue( _cmdline.getOptionValue("d").equals("bar")); assertEquals(1, _cmdline.getOptionValues("d").length); } public void testMultipleArgValues() { String[] result = _cmdline.getOptionValues("e"); String[] values = new String[] { "one", "two" }; assertTrue( _cmdline.hasOption("e") ); assertEquals(2, _cmdline.getOptionValues("e").length); assertTrue( Arrays.equals( values, _cmdline.getOptionValues("e") ) ); } public void testTwoArgValues() { String[] result = _cmdline.getOptionValues("g"); String[] values = new String[] { "val1", "val2" }; assertTrue( _cmdline.hasOption("g") ); assertEquals(2, _cmdline.getOptionValues("g").length); assertTrue( Arrays.equals( values, _cmdline.getOptionValues("g") ) ); } public void testComplexValues() { String[] result = _cmdline.getOptionValues("h"); String[] values = new String[] { "val1", "val2" }; assertTrue( _cmdline.hasOption("i") ); assertTrue( _cmdline.hasOption("h") ); assertEquals(2, _cmdline.getOptionValues("h").length); assertTrue( Arrays.equals( values, _cmdline.getOptionValues("h") ) ); } public void testExtraArgs() { String[] args = new String[] { "arg1", "arg2", "arg3" }; assertEquals(3, _cmdline.getArgs().length); assertTrue( Arrays.equals( args, _cmdline.getArgs() ) ); } public void testCharSeparator() { // tests the char methods of CommandLine that delegate to // the String methods String[] values = new String[] { "key", "value", "key", "value" }; assertTrue( _cmdline.hasOption( "j" ) ); assertTrue( _cmdline.hasOption( 'j' ) ); assertEquals( 4, _cmdline.getOptionValues( "j" ).length ); assertEquals( 4, _cmdline.getOptionValues( 'j' ).length ); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "j" ) ) ); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'j' ) ) ); values = new String[] { "key1", "value1", "key2", "value2" }; assertTrue( _cmdline.hasOption( "k" ) ); assertTrue( _cmdline.hasOption( 'k' ) ); assertEquals(4, _cmdline.getOptionValues( "k" ).length); assertEquals(4, _cmdline.getOptionValues( 'k' ).length); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "k" ) ) ); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'k' ) ) ); values = new String[] { "key", "value" }; assertTrue( _cmdline.hasOption( "m" ) ); assertTrue( _cmdline.hasOption( 'm' ) ); assertEquals(2, _cmdline.getOptionValues( "m" ).length); assertEquals(2, _cmdline.getOptionValues( 'm' ).length); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "m" ) ) ); assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'm' ) ) ); } /** * jkeyes - commented out this test as the new architecture * breaks this type of functionality. I have left the test * here in case I get a brainwave on how to resolve this. */ /* public void testGetValue() { // the 'm' option assertTrue( _option.getValues().length == 2 ); assertEquals( _option.getValue(), "key" ); assertEquals( _option.getValue( 0 ), "key" ); assertEquals( _option.getValue( 1 ), "value" ); try { assertEquals( _option.getValue( 2 ), "key" ); fail( "IndexOutOfBounds not caught" ); } catch( IndexOutOfBoundsException exp ) { } try { assertEquals( _option.getValue( -1 ), "key" ); fail( "IndexOutOfBounds not caught" ); } catch( IndexOutOfBoundsException exp ) { } } */ }